import Foundation
import Combine

class SettingsViewModel: ObservableObject {
    @Published var reminderSettings = ReminderSettings()
    @Published var userProfile = UserProfile()
    @Published var isMetricUnit: Bool = true // 默认使用毫升作为单位
    
    private var cancellables = Set<AnyCancellable>()
    
    init() {
        // 加载保存的设置
        reminderSettings.loadSettings()
        
        // 加载计量单位设置
        isMetricUnit = UserDefaults.standard.bool(forKey: "isMetricUnit")
    }
    
    // 保存所有设置
    func saveSettings() {
        reminderSettings.saveSettings()
        
        // 保存计量单位设置
        UserDefaults.standard.set(isMetricUnit, forKey: "isMetricUnit")
        
        // 更新通知
        updateNotifications()
    }
    
    // 更新通知设置
    private func updateNotifications() {
        NotificationManager.shared.scheduleReminders(
            interval: reminderSettings.interval,
            startTime: reminderSettings.startTime,
            endTime: reminderSettings.endTime,
            sound: reminderSettings.isSoundEnabled,
            vibration: reminderSettings.isVibrationEnabled
        )
    }
    
    // 转换单位（毫升 <-> 盎司）
    func convertValue(value: Double, toMetric: Bool) -> Double {
        if toMetric {
            // 盎司转毫升 (1盎司 ≈ 29.5735毫升)
            return value * 29.5735
        } else {
            // 毫升转盎司
            return value / 29.5735
        }
    }
    
    // 根据当前单位显示适当的值
    func displayValueInCurrentUnit(valueInML: Double) -> Double {
        return isMetricUnit ? valueInML : convertValue(value: valueInML, toMetric: false)
    }
    
    // 获取当前单位的文本表示
    func getCurrentUnitText() -> String {
        return isMetricUnit ? "毫升" : "盎司"
    }
} 